#ifndef INPUTFUNCTION_H
#define INPUTFUNCTION_H

#include <QThread>
#include "input.h"
class InputFunction;
typedef void (InputFunction::*InputFunc)(bool);

typedef struct __cal_func
{
    //InputFunc func;
    void (InputFunction::*func)(bool status);
    const char* name;
}CalFun;
class Input;
class InputFunction : public QObject
{
    Q_OBJECT
public:
//    typedef struct __Input
//    {
//        int ionum;
//        bool status; //当前电平状态
//        bool normalStatus;
//        int functionNum;
//        void (InputFunctionThread::*inputFunction)(bool);
//    }Input;
    enum {
        NORMALCLOSE = 0,
        NORMALOPEN
    };
    static InputFunction *getInputFunctionMgr();
    static const QString INPUT_SET;
    static const QString STATUS_NORMAL_SET;
    static const QString FUNCTION_SET;
    Input* getInput(uint no) {return mInputList.at(no);}

    void initInputFunction(Input* input,uint status,uint normalstatus,uint functionnum);

    int inputIoCount();
    int functionCount();
    QString getInputSetting(uint);

    QStringList functionNameList();
    QStringList normalStatusList();
    uint  getNormalStatus(uint num);
    uint  getFunctionNum(uint num);

    int getStatus(uint num);


    void saveInputFunction(uint num,uint normalStatus,uint functionNum);
//    void run();

signals:
    void zero(bool status);
//    void acquireTare(bool status);
//    void deleteTare(bool status);
//    void acqDelTare(bool status);
//    void functionStart(bool status);
//    void functionEnd(bool status);
//    void weight(bool status);
//    void directWeight(bool status);
//    void disableWeight(bool status);
    void in(bool status);
    void out(bool status);
    void positon1(bool status);
    void positon2(bool status);
    void positon3(bool status);
    void positon4(bool status);
    void positon5(bool status);
    void positon6(bool status);
    void positon7(bool status);
    void positon8(bool status);
    void positon9(bool status);
    void positon10(bool status);

public slots:
    void handleInput(int,int);

private:
    static InputFunction *mInstance;
    explicit InputFunction(QObject *parent = 0);
    const static int mInputNoTab[];
    QList<Input*> mInputList;
    static const CalFun functionList[];

    static const char* NORMAL_STATUS[];






};

#endif // INPUTFUNCTION_H
